class Emp {
  final String ename;   //const构造方法赋值的属性，必需声明为final
  final int age;

  const Emp(this.ename, this.age);      //常量构造方法  注意：此处的const不能变为final

  printInfo(){
    print('ename:${this.ename}, age:${this.age}');
  }
}

main(){
  //所有编程语言中，对象变量名的本质：是对象在内存中的首地址/指针
  //new关键字创建一个对象，本质就是在内存中分配一块新的内存保存新对象
  var e1 = const Emp('Tom', 18);    //使用const调用常量构造方法，会现在内存中查找有没有完全相同属性的对象，如果有则返回该对象，不再创建新的；否则才创建新对象
  var e2 = const Emp('Mary', 20);
  var e3 = const Emp('Tom', 18);
  // var e4 = e1;
  var e5 = Emp('Tom', 18);          //调用常量构造方法时，删除const，那么就必然创建新对象

  //此处的 == 运算符本质在比较两个对象内存地址是不是同一份
  print(e1 == e2);              //false
  print(e1 == e3);              //true
  // print(e1 == e4);
  print(e1 == e5);              //false

}